// import com.alibaba.druid.sql.ast.SQLDataType;
// import com.alibaba.druid.sql.ast.SQLDataTypeImpl;
// import com.alibaba.druid.sql.ast.SQLObject;
// import com.alibaba.druid.sql.visitor.SQLASTVisitor;

// import java.math.BigDecimal;
// import java.util.Collections;
// import java.util.List;
#pragma once
#include <string>
#include <list>
#include "SQLNumericLiteralExpr.h"
#include "SQLValuableExpr.h"

class SQLDataType;

class SQLDecimalExpr : public SQLNumericLiteralExpr/*, virtual public SQLValuableExpr  ,virtual public Comparable<SQLDecimalExpr>*/
{
public:
  static SQLDataType_ptr DATA_TYPE;

  double value;
  string_ptr  literal;

  SQLDecimalExpr();

  SQLDecimalExpr(double value);

  SQLDecimalExpr(string_ptr  value);
  SHAREDOBJECT(SQLDecimalExpr);

  string_ptr  getLiteral();

  virtual SQLObject_ptr clone();

  //@Override
  SQLObject_list_ptr  getChildren();

  //@Override
  double getNumber();

  double getValue();

  void setValue(double value);

  void accept0(SQLASTVisitor_ptr visitor);

  //@Override
  int hashCode();

  //@Override
  bool equals(Object_ptr obj);

  //@Override
  void setNumber(double number);

  //@Override
  int compareTo(std::shared_ptr<SQLDecimalExpr> o);
};
